package server;
import common.*;
import java.rmi.RemoteException;

/**
 * Classe necessaria a far partire i server che saranno poi in ascolto per ricevere connessioni da parte di client tramite protocolli RMI e socket. La classe viene anche chiamata per effettuare il cambio turno o in caso di morte di una specie: si preoccupa di passare il messaggio agli oggetti server creati da questa classe.
 */
public class Master_Server implements Server{

	private Gioco gioco;
	private Partita partita;
	private Server_RMI serverr;
	private Server_socket servers;
	
	/**
	 * Costruttore di classe: istanzia gli oggetti necessari per la gestione della partita. Istanzia i due oggetti server necessari per stare in ascolto sulle connessioni da parte dei client.
	 */
	public Master_Server(){
		
		gioco = new Gioco();
		partita = new Partita(this, gioco);
		servers = new Server_socket(gioco, partita);
		try {
			serverr = new Server_RMI(gioco, partita);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		servers.start();
		new Thread(serverr).start();
	}
	
	@Override
	public  void cambioTurno(String username){
		System.out.println("Cambio il turno !!");
		servers.cambioTurno(username);
		serverr.cambioTurno(username);
	}
	
	@Override
	public void specieMorta(String username, Boolean bul){
		System.out.println("Morta la specie di " + username + " !!");
		servers.specieMorta(username, bul);
		serverr.specieMorta(username, bul);
		if ( bul == true )
			partita.cambioTurno();
	}
	
	public static void main(String[] args) {
		
		new Master_Server();
	}
}
